package org.zhangyp.n01jdkapi.n01oop;

/**
 * 封装
 * <p>
 * 利用抽象数据类型将数据和基于数据的操作封装在一起，使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部，尽可能地隐藏内部的细节，
 * 只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节，但可以通过对象对外提供的接口来访问对象。
 * <p>
 * <p>
 * <p>
 * <p>
 * 以下Package类封装name、gender、age等属性，外界只能通过get()方法获取一个Person对象的name属性和gender属性，
 * 而无法获取age属性，但是age属性可以供work()方法使用
 */
public class Package {
    private String name;
    private int gender;
    private int age;

    public Package(String name, int gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    /**
     * gender属性使用int数据类型进行存储，封装使得用户注意不到这种实现细节。
     * 并且在需要修改gender属性使用的数据类型时，也可以在不影响客户端代码的情况下进行。
     *
     * @return
     */
    public String getGender() {
        return gender == 0 ? "man" : "woman";
    }

    public void work() {
        if (18 <= age && age <= 50) {
            System.out.println(name + " is working verr hard!");
        } else {
            System.out.println(name + " can't work any more!");
        }
    }


}
